﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Marketing.Common;
using System.Data.SqlClient;
using Chilis.Marketing.Business.Entity;
using System.Data;

namespace Chilis.Marketing.Data.Access
{
    public class DAUnidad : ConexionBD
    {
        #region ATRIBUTOS

        private SqlCommand cmd;
        ChilisDataContext chilisDataContext = new ChilisDataContext();

        #endregion

        #region CONSTRUCTOR
        #endregion

        #region PROPIEDADES
        #endregion

        #region METODOS

        /// <summary>
        /// Método              : insertarUnidad
        /// Descripción         : Inserta Unidad en la BD
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="unidadBE">Entidad que representa la Unidad</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id de la Unidad insertada</returns>
        public int? insertarUnidad(BEUnidad unidadBE,
                                  bool transaccionIniciada)
        {
            int? codInsertado = 0;

            try
            {
                int? tempEstado = (int)unidadBE.Estado;

                chilisDataContext.spInsertaUnidad(ref codInsertado,
                                                  unidadBE.Descripcion,
                                                  tempEstado,
                                                  unidadBE.Usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return codInsertado;
        }


        /// <summary>
        /// Método              : modificarUnidad
        /// Descripción         : Modifica Unidad en la BD
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="unidadBE">Entidad que representa la Unidad</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarUnidad(BEUnidad unidadBE,
                                    bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)unidadBE.Estado;

                chilisDataContext.spModificaUnidad(unidadBE.IdUnidad,
                                                  unidadBE.Descripcion,
                                                  tempEstado,
                                                  unidadBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarUnidad
        /// Descripción         : Elimina Unidad en la BD
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="unidadBE">Entidad que representa la Unidad</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarUnidad(BEUnidad unidadBE,
                                   bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)unidadBE.Estado;

                chilisDataContext.spEliminaUnidad(unidadBE.IdUnidad,
                                                  tempEstado,
                                                  unidadBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }


        /// <summary>
        /// Método              : obtenerUnidadPorId
        /// Descripción         : Obtiene la Entidad Unidad
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="idUnidad">Id Unidad</param>
        /// <returns>Retorna el Objeto que representa la Entidad Cargo</returns>
        public BEUnidad obtenerUnidadPorId(int idUnidad)
        {
            DataSet ds = null;
            BEUnidad unidadBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelUnidadPorId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdUnidad", idUnidad));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    unidadBE = this.poblarUnidad(ds.Tables[(int)Constantes.UNIDAD_DATOS.DATOS_GENERALES], unidadBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return unidadBE;
        }

        /// <summary>
        /// Método              : poblarUnidad
        /// Descripción         : Se encarga de poblar los datos obtenidos en la Entidad Unidad
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="dtUnidad">Resultado de la Búsqueda por Id</param>
        /// <param name="unidadBE">Entidad que representa la Unidad</param>
        /// <returns>Retorna el Objeto que representa la Entidad Unidad</returns>
        private BEUnidad poblarUnidad(DataTable dtUnidad, BEUnidad unidadBE)
        {
            if (dtUnidad != null && dtUnidad.Rows.Count > 0)
            {
                if (unidadBE == null)
                {
                    unidadBE = new BEUnidad();
                }

                DataRow drUnidad = dtUnidad.Rows[0];
                if (drUnidad["id_unidad"] != DBNull.Value)
                {
                    int tempIdUnidad = 0;
                    int.TryParse(drUnidad["id_unidad"].ToString(), out tempIdUnidad);
                    unidadBE.IdUnidad = tempIdUnidad;
                }
                if (drUnidad["descripcion"] != DBNull.Value)
                {
                    unidadBE.Descripcion = drUnidad["descripcion"].ToString();
                }
                if (drUnidad["estado"] != DBNull.Value)
                {
                    unidadBE.Estado = Common.Constantes.ObtenerEnumEstado(drUnidad["estado"].ToString());
                }
            }
            return unidadBE;
        }


        /// <summary>
        /// Función             : buscarUnidades
        /// Descripción         : Busca las Unidades de acuerdo a los filtros configurados
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="filtro">Entidad que representa la Unidad</param>
        /// <returns>Listado de Cargos de acuerdo al filtro especificado</returns>
        public DataTable buscarUnidades(BEUnidad filtro)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter da = null;
            this.Conexion();
            cmd = new SqlCommand();
            cmd.Connection = this.connection;

            this.AbrirConexion();

            cmd.CommandText = "spListarUnidad";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdUnidad", filtro.IdUnidad));
            cmd.Parameters.Add(new SqlParameter("@pDescripcion", filtro.Descripcion));
            cmd.Parameters.Add(new SqlParameter("@pEstado", filtro.Estado.ToString("D")));
            cmd.Parameters.Add(new SqlParameter("@pOrderBy", filtro.Order_by));
            cmd.Parameters.Add(new SqlParameter("@pDeForma", filtro.De_forma));

            try
            {
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                dt = null;
                throw ex;
            }
            finally
            {
                if (da != null)
                {
                    da.Dispose();
                }
                cmd.Dispose();
                this.CerrarConexion();
            }
            return dt;

        }


        #endregion
    }
}
